package randlearn

import (
	"fmt"
	"regexp"
)

// 使用 compile方法判读正则表达式是符合规则
func RegexVar() {
	var v1 = `.[0-9+]`
	re, err := regexp.Compile(v1)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(re)
	}
}

// MustCompile， 使用这个方法的正则表达式不正确， 程序会panic
func RegexpVar2() {
	var v1 = `[a-z]`
	result := regexp.MustCompile(v1)
	fmt.Println(result)
}

// 使用match检查 字节切片是否匹配正则表达式
func RegexpVar3() {
	var v1 = `[a-z]`
	result := regexp.MustCompile(v1)
	re := result.Match([]byte("helloWrold!"))
	fmt.Println(re)
}

// 使用 MatchString检查 字符串是否匹配正则表达式
func RegexpVar4() {
	var v1 = `[a-z]`
	regexpv1, err := regexp.Compile(v1)
	if err != nil {
		fmt.Println(err)
	}
	result := regexpv1.MatchString("hahahhha")
	fmt.Println(result)
}

// 使用find 通过正则表达式查找 字节串中的子串
func RegexpVar5() {
	var v1 = `[a-z]`
	// 设定一个 字节类型的切片
	var v2 = []byte("Go123lang456")
	regexpv1, err := regexp.Compile(v1)
	if err != nil {
		fmt.Println(err)
	}
	// 使用find找到其中符合正则表达式的 第一个 子串
	result := regexpv1.Find(v2)
	fmt.Println(result)
}

// 使用findAll 根据正则表达式 找到字节串中所有匹配的子字节
func RegexpVar5_1() {

	var v1 = []byte("123HELLO123hello456GO456lang")
	var regexpVar = `[a-z]+`
	regexpv1, err := regexp.Compile(regexpVar)
	if err != nil {
		fmt.Println(err)
	}
	// 插入字节串 插入 从前往后需要检索的子串的个数,  -1代表检索所有子串
	result := regexpv1.FindAll(v1, 2)
	for i, _ := range result {
		fmt.Println(string(result[i]))
	}

}

// 使用 FindString 通过正则表达式查找 字符串中的字串

func RegexpVar6() {
	var v1 = `[a-z]+`
	var v2 string = "123abcd123ABC123Dabcd"
	regexpv1, err := regexp.Compile(v1)
	if err != nil {
		fmt.Println(err)
	}
	result := regexpv1.FindString(v2)
	fmt.Println(result)
}

// 使用FindAllString 通过正则表达式规则查找 字符串中的字串

func RegexpVar6_1() {
	var v1 = "asd123ASD456GO789LAND"
	var regexpVar1 = `[0-9]+`
	regexpV1, err := regexp.Compile(regexpVar1)
	if err != nil {
		fmt.Println(err)
	}
	result := regexpV1.FindAllString(v1, -1)
	for i, _ := range result {
		fmt.Println(result[i])
	}
}

// 使用 FindSubmatch 查找字节串中，匹配的正则表达式的串以及其字串

func RegexpVar7() {
	var v1 = []byte("abasss!#!@@163@submatch.coma9aa70ccee")
	regexpVar := `[0-9]+@[a-zA-z]+.*com`
	regexpv1, err := regexp.Compile(regexpVar)
	if err != nil {
		fmt.Println(err)
	}
	result := regexpv1.FindSubmatch(v1)
	for _, j := range result {
		fmt.Println(string(j))
	}
}

// 使用 FindStringSubmatch 查找字符串中，匹配的正则表达式的串以及其字串
func RegexpVar7_1() {
	var v1 = "123-456-789-234-567-890"
	regexpVar := `[0-9]+-[0-9]+-[0-9]+`
	regexpv1, err := regexp.Compile(regexpVar)
	if err != nil {
		fmt.Println(err)
	}
	result := regexpv1.FindStringSubmatch(v1)
	for i, j := range result {
		fmt.Println(i, j)
	}

}

// 使用replaceAll 根据正则表达式匹配的字节串，替换成自定义字节串
func RegexpVar8() {
	var regexpVar = `[0-9]+@[a-z]+.*com`
	regexpV1, err := regexp.Compile(regexpVar)
	if err != nil {
		fmt.Println(err)
	}

	var v1 = []byte("abuceoamasd163@a.combdcmyccccmaidsd163@a.comejgasd1188@")
	var v2 = []byte("164@qeqe.com")

	result := regexpV1.ReplaceAll(v1, v2)
	fmt.Println(string(result))

}

// 使用replaceAllString 根据正则表达式匹配的字符串，替换成自定义字符串
func RegexpVar8_1() {
	var regexpVar = `[0-9]+-[a-z]+-[0-9]+`
	regexpV1, err := regexp.Compile(regexpVar)
	if err != nil {
		fmt.Println(err)
	}
	var v1 = "123-asd-123-asd-123-asd-123"
	var v2 = "999-aaa-999-aaa"

	result := regexpV1.ReplaceAllString(v1, v2)
	fmt.Println(result)

}
